import nmap  # 导入nmap模块，以便在Python中使用nmap功能


def scan_services(network):
    nm = nmap.PortScanner()  # 创建一个PortScanner对象，用于执行网络扫描
    nm.scan(hosts=network, arguments='-sV')  # 使用-sV参数进行服务版本扫描
    for host in nm.all_hosts():  # 遍历扫描结果中的所有主机
        print('Host : %s (%s)' % (host, nm[host].hostname()))  # 打印主机IP地址和主机名
        print('State : %s' % nm[host].state())  # 打印主机状态（如up或down）
        for protocol in nm[host].all_protocols():  # 遍历主机上所有扫描到的协议
            print('Protocol : %s' % protocol)  # 打印协议名称（如tcp或udp）
            lport = list(nm[host][protocol].keys())  # 获取协议的所有端口
            lport.sort()  # 对端口进行排序
            for port in lport:  # 遍历每个端口
                print('port : %s\tstate : %s' % (port, nm[host][protocol][port]['state']))  # 打印端口和状态


if __name__ == '__main__':
    network = '192.168.1.0/24'  # 定义要扫描的网络范围，这里是一个C类网络
    scan_services(network)  # 调用函数执行服务版本扫描
